package kiven.jee.service.impl;

import java.io.Serializable;

import kiven.jee.dao.IBaseDao;
import kiven.jee.pagination.Page;
import kiven.jee.service.IBaseService;
import kiven.jee.utils.common.Constants;

@SuppressWarnings("unchecked")
public abstract class BaseService<E extends Serializable, PK extends Serializable>
		implements IBaseService<E, PK> {
	protected IBaseDao<E, PK> baseDao;

	public abstract void setBaseDao(IBaseDao<E, PK> baseDao);

	@Override
	public boolean exists(PK id) {
		return baseDao.exists(id);
	}

	@Override
	public void add(E entity) {
		baseDao.save(entity);
	}

	@Override
	public void update(E entity) {
		baseDao.update(entity);
	}

	@Override
	public void delete(PK id) {
		baseDao.removeById(id);
	}

	@Override
	public void deleteObject(E entity) {
		baseDao.remove(entity);
	}

	@Override
	public E get(PK id) {
		return baseDao.findById(id);
	}

	@Override
	public int countAll() {
		return baseDao.getTotalAll();
	}

	@Override
	public Page<E> listAll(int pageNO) {
		return (Page<E>) baseDao.findAll(pageNO, Constants.DEFAULT_PAGE_SIZE);
	}

	@Override
	public Page<E> listAll(int pageNO, int pageSize) {
		return (Page<E>) baseDao.findAll(pageNO, pageSize);
	}

	@Override
	public Page<E> pre(PK id, int pageNO, int pageSize) {
		return (Page<E>) baseDao.pre(id, pageNO, pageSize);
	}

	@Override
	public Page<E> next(PK id, int pageNO, int pageSize) {
		return (Page<E>) baseDao.next(id, pageNO, pageSize);
	}

	@Override
	public Page<E> pre(PK id, int pageNO) {
		return (Page<E>) baseDao.pre(id, pageNO, Constants.DEFAULT_PAGE_SIZE);
	}

	@Override
	public Page<E> next(PK id, int pageNO) {
		return (Page<E>) baseDao.next(id, pageNO, Constants.DEFAULT_PAGE_SIZE);
	}
}
